package org.orz.cloud.lock;

import org.orz.cloud.lock.zookeeper.ZkLock;

/**
 * 统一的锁对象，具体实现可以是分布式锁，也可以不是分布式锁，分布式锁统一实现Lock的下一层实现接口
 * {@link DistributedLock}，比如{@link ZkLock}就实现了{@link DistributedLock}接口。
 */
public interface Lock {

	/**
	 * 加锁操作
	 * @param key 锁对象的key
	 * @return 成功或失败
	 */
	boolean lock(String key);

	/**
	 * 加锁操作，并设置锁的失效时间
	 * @param key 锁对象的key
	 * @param timeout 超时时间
	 * @return 成功或失败
	 */
	boolean lock(String key, long timeout);

	/**
	 * 释放锁
	 */
	void release();
}
